/* author：李长生
   info：用于表单中验证用户名和密码函数 */

/* 前端 账号/密码 验证
    1. 非空验证：判断输入框是否为空
    2. 规则验证：判断输入的内容是否符合正则表达式
    3. 正确验证：判断输入的内容在数据库是否存在 */

/* 创建正则表达式 */
// 1. 用户名：4-8位，字母，数字，下划线，减号
const unameRE = /^[a-zA-Z0-9_-]{4,8}$/

// 2. 密码：8-12位，至少一个字母和一个数字
const passRE = /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,12}$/

/* 验证函数validate
    1. rule：验证规则
    2. value：用户输入的内容
    3. callback：rule验证后给出的提示信息回调函数 */

/* 添加账号 */
// 账号
export var validateUname = (rule, value, callback) => {
  if (!value) {
    // 1. 非空验证
    callback(new Error('请输入账号'))
  } else if (!unameRE.test(value)) {
    // 2. 规则验证
    callback(new Error('用户名只能是4-8位字母，数字，下划线，减号'))
  } else {
    callback()
  }
}

// 密码
export var validatePass = (rule, value, callback) => {
  if (!value) {
    // 1. 非空验证
    callback(new Error('请输入密码'))
  } else if (!passRE.test(value)) {
    // 2. 规则验证
    callback(new Error('8-12位，至少一个字母和一个数字'))
  } else {
    callback()
  }
}

/* 修改密码 */
/* 注意：确认密码需要用到data中的数据，所以通过闭包吧this指针传过去
1. this：当前组件data中的this
2. modifyForm：当前组件表单的数据对象
3. checkPass/newPass：当前组件modifyForm中的新密码数据 */

// 原密码
export function validateOldPass(param1, param2, param3) {
  return (rule, value, callback) => {
    if (!value) {
      // 1. 非空验证
      callback(new Error('请输入原密码'))
    } else if (!passRE.test(value)) {
      // 2. 规则验证
      callback(new Error('8-12位，至少一个字母和一个数字'))
    } else if (value === param1[param2][param3]) {
      // 3. 判断是否与原密码相同
      callback(new Error('原密码与新密码不能相同'))
    } else {
      callback()
    }
  }
}

// 新密码
export function validateNewPass(param1, param2, param3, param4) {
  return (rule, value, callback) => {
    if (!value) {
      // 1. 非空验证
      callback(new Error('请输入新密码'))
    } else if (!passRE.test(value)) {
      // 2. 规则验证
      callback(new Error('8-12位，至少一个字母和一个数字'))
    } else if (value === param1[param2][param3]) {
      // 3. 判断是否与原密码相同
      callback(new Error('新密码与原密码不能相同'))
    } else {
      if (param1[param2][param4] !== '') {
        // 4. 当确认密码有值时，进行反向验证
        param1.$refs[param2].validateField(param4)
      }
      callback()
    }
  }
}

// 确认密码
export function validateCheckPass(param1, param2, param3) {
  return (rule, value, callback) => {
    if (!value) {
      // 1. 非空验证
      callback(new Error('请再次输入密码'))
    } else if (!passRE.test(value)) {
      // 2. 规则验证
      callback(new Error('8-12位，至少一个字母和一个数字'))
    } else if (value !== param1[param2][param3]) {
      // 3. 确认一致验证
      callback(new Error('两次输入密码不一致!'))
    } else {
      callback()
    }
  }
}
